const path = require('path')


// const CompressionWebpackPlugin = require("compression-webpack-plugin"); // 开启gzip压缩， 按需引用
// const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i; // 开启gzip压缩， 按需写入
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin; // 打包分析
const isproduction = ['production'].includes(process.env.NODE_ENV);
const resolve = (dir) => path.join(__dirname, dir);
const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = {
    publicPath: '/', // 公共路径
    outputDir: 'dist', // 'dist', 生产环境构建文件的目录
    assetsDir: 'assets', // 相对于outputDir的静态资源(js、css、img、fonts)目录
    lintOnSave: false, // 是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码
    runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
    productionSourceMap: !isproduction, // 是否在构建生产包时生成 sourceMap 文件，false将提高构建速度
    parallel: require("os").cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用， 仅作用于生产构建。
    pwa: {}, // 向 PWA 插件传递选项。

    chainWebpack: config => {

        if (isproduction) {
            //生产环境
            config.resolve.symlinks(true); // 修复热更新失效
            // 如果使用多页面打包，使用vue inspect --plugins查看html是否在结果数组中
            config.plugin("html").tap(args => {
                // 修复 Lazy loading routes Error
                args[0].chunksSortMode = "none";
                return args;
            });
            // 打包分析, 打包之后自动生成一个名叫report.html文件(可忽视)
            config.plugin("webpack-report").use(BundleAnalyzerPlugin, [{
                analyzerMode: "static"
            }]);

        } else {
            //开发环境
        }

    },
    configureWebpack: config => {
        if (isproduction) {
            //生产环境
            config.plugins.push(
                new CopyWebpackPlugin([{
                    from: 'node_modules/mavon-editor/dist/highlightjs',
                    to: path.resolve(__dirname, './dist/highlightjs'), // 插件将会把文件导出于/dist/highlightjs之下
                }, {
                    from: 'node_modules/mavon-editor/dist/markdown',
                    to: path.resolve(__dirname, './dist/markdown'), // 插件将会把文件导出于/dist/markdown之下
                }, {
                    from: 'node_modules/mavon-editor/dist/katex', // 插件将会把文件导出
                    to: path.resolve(__dirname, './dist/katex')
                }]),
            )
        } else {
            //开发环境
            config.plugins.push(
                new CopyWebpackPlugin([{
                    from: 'node_modules/mavon-editor/dist/highlightjs',
                    to: path.resolve(__dirname, './dist/highlightjs'), // 插件将会把文件导出于/dist/highlightjs之下
                }, {
                    from: 'node_modules/mavon-editor/dist/markdown',
                    to: path.resolve(__dirname, './dist/markdown'), // 插件将会把文件导出于/dist/markdown之下
                }, {
                    from: 'node_modules/mavon-editor/dist/katex', // 插件将会把文件导出
                    to: path.resolve(__dirname, './dist/katex')
                }]),
            )
        }
    },

    // css: {
    //     extract: true, // 是否使用css分离插件 ExtractTextPlugin
    //     sourceMap: false, // 开启 CSS source maps?
    //     loaderOptions: {
    //         css: {}, // 这里的选项会传递给 css-loader
    //         postcss: {}, // 这里的选项会传递给 postcss-loader
    //         // 给sass-loader 传递选项
    //         scss: {},
    //     }, // css预设器配置项 详见https://cli.vuejs.org/zh/config/#css-loaderoptions
    //     requireModuleExtension: true // 去掉文件名中的 .module
    // },



    devServer: {
        open: true, //配置自动启动浏览器
        host: 'localhost',
        port: 8080,
        https: false,
        hotOnly: false,
        proxy: { // 配置跨域
            '/': {
                target: 'http://0.0.0.0:7001',
                ws: true, //websocket支持
                changOrigin: true,
                pathRewrite: {
                    '^/': ''
                }
            }
        },
        before: app => {}
    }
}